Accelerate IDE PIO on HVM/IA64 [2/3]
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Tue, 27 Feb 2007 15:34:24 +0000 (15:34 +0000)
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Tue, 27 Feb 2007 15:34:24 +0000 (15:34 +0000)
Add one more page to the guest for IDE PIO.

Signed-off-by: Kouya Shimura <kouya@jp.fujitsu.com>
tools/libxc/ia64/xc_ia64_hvm_build.c
tools/python/xen/xend/image.py

index 270a6f67a27191e91f57edfef3ee08ca23260909..7beddddf328a4744eaef735bb6914544ac54e237 100644 (file)
@@ -569,6 +569,7 @@ setup_guest(int xc_handle, uint32_t dom, unsigned long memsize,
     xen_pfn_t *pfn_list;
     shared_iopage_t *sp;
     void *ioreq_buffer_page;
+    void *pio_buffer_page;
     unsigned long dom_memsize = memsize << 20;
     unsigned long nr_pages = memsize << (20 - PAGE_SHIFT);
     unsigned long vcpus;
@@ -628,9 +629,10 @@ setup_guest(int xc_handle, uint32_t dom, unsigned long memsize,
 
     pfn_list[0] = IO_PAGE_START >> PAGE_SHIFT;
     pfn_list[1] = STORE_PAGE_START >> PAGE_SHIFT;
-    pfn_list[2] = BUFFER_IO_PAGE_START >> PAGE_SHIFT; 
+    pfn_list[2] = BUFFER_IO_PAGE_START >> PAGE_SHIFT;
+    pfn_list[3] = BUFFER_PIO_PAGE_START >> PAGE_SHIFT;
 
-    rc = xc_domain_memory_populate_physmap(xc_handle, dom, 3,
+    rc = xc_domain_memory_populate_physmap(xc_handle, dom, 4,
                                            0, 0, &pfn_list[0]);
     if (rc != 0) {
         PERROR("Could not allocate IO page or store page or buffer io page.\n");
@@ -684,6 +686,12 @@ setup_guest(int xc_handle, uint32_t dom, unsigned long memsize,
                                              pfn_list[2]); 
     memset(ioreq_buffer_page,0,PAGE_SIZE);
     munmap(ioreq_buffer_page, PAGE_SIZE);
+
+    pio_buffer_page = xc_map_foreign_range(xc_handle, dom, PAGE_SIZE,
+                                           PROT_READ | PROT_WRITE,
+                                           pfn_list[3]);
+    memset(pio_buffer_page,0,PAGE_SIZE);
+    munmap(pio_buffer_page, PAGE_SIZE);
     free(pfn_list);
     return 0;
 
index d6aa9182de73f0825c9b46beb65407d24ca89887..ec3ce1fe307e78f1fb00b0eca3fc57e292e93c1a 100644 (file)
@@ -572,8 +572,8 @@ class IA64_HVM_ImageHandler(HVMImageHandler):
 
     def getRequiredAvailableMemory(self, mem_kb):
         page_kb = 16
-        # ROM size for guest firmware, ioreq page and xenstore page
-        extra_pages = 1024 + 3
+        # ROM size for guest firmware, ioreq page, pio page and xenstore page
+        extra_pages = 1024 + 4
         return mem_kb + extra_pages * page_kb
 
     def getRequiredInitialReservation(self):